Red Hat Enterprise Linux 7.5のネットワーク設定でちょっとハマった話
こんにちは、坂巻です。
Red Hat Enterprise Linux 7.5にセカンダリプライベートIPを付与したのですが、OSがIPアドレスを認識せず、応答がない事象でちょっとハマりました。
自身で経験したケースをメモとして残しておきます。
やりたい事
ENI(EC2の仮想NIC)にセカンダリプライベートIPを設定したい。
ハマった事
以下のように、ENIにセカンダリプライベートIPを追加しました。
プライベートIPに関連付けしたEIPは応答するのに対し、
セカンダリプライベートIPに関連付けしたEIPが応答しませんでした。
$ ping 13.230.74.42 PING 13.230.74.42 (13.230.74.42): 56 data bytes 64 bytes from 13.230.74.42: icmp_seq=0 ttl=48 time=12.332 ms 64 bytes from 13.230.74.42: icmp_seq=1 ttl=48 time=9.719 ms 64 bytes from 13.230.74.42: icmp_seq=2 ttl=48 time=10.338 ms (略) $ ping 13.114.35.61 PING 13.114.35.61 (13.114.35.61): 56 data bytes Request timeout for icmp_seq 0 Request timeout for icmp_seq 1 Request timeout for icmp_seq 2
OSにログインしネットワークの設定を確認してみると、
セカンダリプライベートIPがOSから認識されていませんでした。
$ ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP group default qlen 1000 link/ether 06:98:78:6c:86:88 brd ff:ff:ff:ff:ff:ff inet 172.16.0.151/24 brd 172.16.0.255 scope global noprefixroute dynamic eth0 valid_lft 2874sec preferred_lft 2874sec inet6 fe80::498:78ff:fe6c:8688/64 scope link valid_lft forever preferred_lft forever
原因
結論からいうと、Amazon Linux以外のディストリビューションの場合、
セカンダリプライベートIPを認識させるにはOS側で設定が必要でした。
Amazon LinuxでセカンダリプライベートIPを使用している時は、ec2-net-utils
が自動でIPアドレスを付与してくれています。
セカンダリプライベート IPv4 アドレスを認識するようにインスタンスのオペレーティングシステムを設定する
解決策
以下マニュアルより、OS側での設定方法を確認しました。
たとえば、ifcfg ファイルを使って eth0 という名前のインターフェースを静的ネットワークで設定するには、/etc/sysconfig/network-scripts/ ディレクトリー内に以下のような内容で ifcfg-eth0 という名前のファイルを作成します。
セカンダリプライベートIPを認識させるために、/etc/sysconfig/network-scripts/eth0:0
ファイルを作成しました。
こんな感じです。
DEVICE=eth0:0 BOOTPROTO=none ONBOOT=yes TYPE=Ethernet IPADDR=172.16.0.57 NETMASK=255.255.255.0
IPADDR
にはセカンダリプライベートIPを設定しています。
ファイルを作成したら、ネットワークサービスを再起動します。
$ sudo service network restart Restarting network (via systemctl): [ OK ]
再度ネットワークの状態を確認すると、OSから認識していることがわかります。
$ ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP group default qlen 1000 link/ether 06:98:78:6c:86:88 brd ff:ff:ff:ff:ff:ff inet 172.16.0.151/24 brd 172.16.0.255 scope global noprefixroute dynamic eth0 valid_lft 3599sec preferred_lft 3599sec inet 172.16.0.57/16 brd 172.16.255.255 scope global noprefixroute eth0:0 valid_lft forever preferred_lft forever inet6 fe80::498:78ff:fe6c:8688/64 scope link tentative valid_lft forever preferred_lft forever
ちゃんと応答もします。
$ ping 13.114.35.61 PING 13.114.35.61 (13.114.35.61): 56 data bytes 64 bytes from 13.114.35.61: icmp_seq=0 ttl=47 time=10.037 ms 64 bytes from 13.114.35.61: icmp_seq=1 ttl=47 time=9.530 ms 64 bytes from 13.114.35.61: icmp_seq=2 ttl=47 time=8.019 ms
まとめ
Amazon Linux以外のディストリビューションで、セカンダリプライベートIPを利用する際は、
OS側での設定が必要なことを覚えておくと良さそうです。
ちなみに、各インスタンスタイプによって、ENIに付与できるIPアドレス数も限られているので、
こちらも頭の片隅に入れておくと良いかもしれません。